Skip to contentMethod: computeNextMove(int, SspPlayer, SspState)
      1: package de.fhdw.gaming.ipspiel23.ssp.strategy;
2: 
3: import java.util.List;
4: import java.util.Optional;
5: import java.util.Random;
6: import java.util.function.Supplier;
7: 
8: import de.fhdw.gaming.core.domain.GameException;
9: import de.fhdw.gaming.ipspiel23.ssp.domain.SspPlayer;
10: import de.fhdw.gaming.ipspiel23.ssp.domain.SspState;
11: import de.fhdw.gaming.ipspiel23.ssp.domain.SspStrategy;
12: import de.fhdw.gaming.ipspiel23.ssp.moves.SspMove;
13: import de.fhdw.gaming.ipspiel23.ssp.moves.factory.SspMoveFactory;
14: 
15: /**
16:  * Implements {@link SspStrategy} by always choosing a random Answer.
17:  * 
18:  * @author DW
19:  *
20:  */
21: public final class SspMixedStrategy implements SspStrategy {
22: 
23:     /**
24:      * The random generator used to create random SSP moves.
25:      * 
26:      */
27:     private static final Random RANDOM = new Random();
28: 
29:     /**
30:      * The factory for creating SSP moves.
31:      */
32:     private final SspMoveFactory moveFactory;
33: 
34:     /**
35:      * Creates an {@link SspMixedStrategy}.
36:      *
37:      * @param moveFactory The factory for creating SSP moves.
38:      */
39:     SspMixedStrategy(final SspMoveFactory moveFactory) {
40:         this.moveFactory = moveFactory;
41: 
42:     }
43: 
44:     /**
45:      * Computes a random next move.
46:      */
47:     @Override
48:     public Optional<SspMove> computeNextMove(final int gameId, final SspPlayer player, final SspState state)
49:             throws GameException, InterruptedException {
50:         final List<Supplier<SspMove>> moveSuppliers = List.of(
51:             moveFactory::createPaperMove,
52:             moveFactory::createScissorsMove, 
53:             moveFactory::createStoneMove);
54:         return Optional.of(moveSuppliers.get(RANDOM.nextInt(moveSuppliers.size())).get());
55:     }
56: 
57:     @Override
58:     public String toString() {
59:         return SspMixedStrategy.class.getSimpleName();
60:     }
61: 
62:     @Override
63:     public boolean equals(final Object obj) {
64:         return obj != null && this.toString().equals(obj.toString());
65:     }
66: 
67:     @Override
68:     public int hashCode() {
69: 
70:         return super.hashCode() * this.toString().hashCode();
71:     }
72: }